/*
xssbuster.cpp

xssbuster - a XSS exploit filter
Copyright (C) 2006 Jeffrey Davis

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

*/

#include "xssbuster.h"

XssBuster::XssBuster()
{
	// Create new Document and Printer objects
	xmlPrinter = new TiXmlPrinter();
	xmlDoc = new TiXmlDocument();
}

XssBuster::~XssBuster()
{
	// Clear the document and trash the objects.
	xmlDoc->Clear();
	delete xmlDoc;
    delete xmlPrinter;
}

std::string XssBuster::Bust(std::string inString)
{
	
	std::string outString;
	try
	{
		// Clear the document
	    xmlDoc->Clear();
	    if(xmlDoc->Error()) throw(xmlDoc->ErrorDesc());
	
	    // Condense white spaces, similar to how standard web browsers read pages
	    xmlDoc->SetCondenseWhiteSpace(true);
	    // Parse the document
	    xmlDoc->Parse(inString.c_str());
	    if(xmlDoc->Error()) throw(xmlDoc->ErrorDesc());
	
	    /******** HTML XSS filtering goes here ********/
        
        // Bind the Printer to the Document and Print the results to the outString
	    xmlDoc->Accept(xmlPrinter);
	    outString.assign(xmlPrinter->CStr());
	    if(xmlDoc->Error()) throw(xmlDoc->ErrorDesc());		
	}
	catch(int e)
	{
		outString.assign("");
		if(xmlDoc->Error()) xmlDoc->ClearError();
	}
	catch(char * e)
	{
		outString.assign("");
		if(xmlDoc->Error()) xmlDoc->ClearError();
	}
	catch(std::exception e)
	{
		outString.assign("");
		if(xmlDoc->Error()) xmlDoc->ClearError();
	}
	// Return the reconstructed XML document
	return outString;
}